package com.example.bookmanagersystem;

import com.example.bookmanagersystem.entity.User;
import com.example.bookmanagersystem.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

// 项目启动时自动执行，用于重置admin用户密码
@Component
public class AdminPasswordReset implements CommandLineRunner {

    // 注入用户数据访问层（用于操作users表）
    @Autowired
    private UserRepository userRepository;

    // 注入项目中配置的密码加密器（确保与登录验证时使用的是同一个）
    @Autowired
    private PasswordEncoder passwordEncoder;

    @Override
    public void run(String... args) throws Exception {
        // 1. 查询数据库中是否存在admin用户
        User admin = userRepository.findByUsername("admin");

        // 2. 若不存在，则新建一个admin用户；若存在，则更新其密码
        if (admin == null) {
            admin = new User();
            admin.setUsername("admin"); // 用户名固定为admin
        }

        // 3. 核心：用当前项目的PasswordEncoder加密密码"123456"
        String rawPassword = "123456"; // 要设置的密码
        String encodedPassword = passwordEncoder.encode(rawPassword); // 加密
        admin.setPassword(encodedPassword); // 设置加密后的密码

        // 4. 补充其他必要字段
        admin.setName("系统管理员"); // 用户名显示
        admin.setEnabled(true); // 确保用户处于启用状态（必须为true，否则无法登录）

        // 5. 保存到数据库（新增或更新）
        userRepository.save(admin);

        // 打印提示日志
        System.out.println("======================================");
        System.out.println("✅ admin用户密码已重置：");
        System.out.println("用户名：admin");
        System.out.println("原始密码：" + rawPassword);
        System.out.println("加密后存储的密码：" + encodedPassword);
        System.out.println("======================================");
    }
}